# nuova versione

import serial
import time
import string
import sys
import common
import logging
from pyhomeClass import *


# default paths
#logFile = common2.logFile


class SerialClass(PyHomeClass):
	buffer=[] #buffer e' la lista che conterra' il contenuto di una linea
	def __init__(self):
		try:
			PyHomeClass.parseConfigFile(self, "mods/serialmod.conf")
			port=PyHomeClass.confvars['port']
			speed=PyHomeClass.confvars['speed']
			# modem/serial init
			self.ser = serial.Serial(port, int(speed), timeout=2)
			self.ser.write("ATZ\r\n")
			time.sleep(1)
			self.ser.write("ATE0 #CID=1\r\n")
			time.sleep(1)
		except serial.serialutil.SerialException:
			print "Impossibile aprire la porta "+port+". Verifica le connessioni e riprova."
			quit()

	def reader(self):
		"""loop and copy serial->console"""
		while 1:
			data = self.ser.readline(1)
			if data == '\r': #and convert_outgoing == CONVERT_CR:
				sys.stdout.write('\n')
				self.bufferize(data)
			else:
				sys.stdout.write(data)
				self.bufferize(data)
				sys.stdout.flush()

	def bufferize(self, data):
		# analizza il buffer e ne restituisce il contenuto
		# innantitutto deve fermarsi quando riceve '\r'
		if data != '\r' and data !="":
			self.buffer.append(data)
			#print self.buffer
		elif data == "":
			self.buffer

		else:
			# la linea si e' conclusa
			# print buffer # <-- test
			readline = string.join(self.buffer,'')
			#print string.join(self.buffer,'')
			# ora ho ricevuto la stringa correttamente e la posso analizzare
		try:
			if string.join(self.buffer,'')=="RING":
				print "[DEBUG] *** sta squillando ***"
			elif "DATE" in readline:
				common.DATE = string.split(readline, ' = ')[1]
				print "[DEBUG] *** Data: "+ common.date(string.split(readline, ' = ')[1]) + " ***"
			elif "TIME" in readline:
				common.TIME = string.split(readline, ' = ')[1]
				print "[DEBUG] *** Ora: " + common.cidtime(string.split(readline, ' = ')[1]) + " ***"
				#print "*** Ora: "+ string.split(readline, ' = ')[1] + " ***"
			elif "NMBR" in readline:
				common.NMBR = string.split(readline, ' = ')[1]
				print "[DEBUG] *** Numero chiamante: "+ string.split(readline, ' = ')[1] + " ***"
			if self.checkinfo():
				print "[DEBUG] dati ok, puo' procedere"
				PyHomeClass.log(self,"Unknown "+" "+common.NMBR)
				# funzioni varie
				#cid = search(common.NMBR)
				#print str(cid[0]) + ": " + str(cid[1])
				#common.speaker(cid[1])
				# log this call
				#logger.log(logging.CALL, str(cid[0])+" "+common.NMBR)
				#logger.info(cid[0]+" "+common.NMBR)

				# pulisci le variabili globali
				[common.DATE, common.TIME, common.NMBR] = ["","",""]
			else:
				print "[DEBUG] dati ancora incompleti"

		except IndexError:
			print "- Errore nell'interpretazione della stringa"
			#logger.error('Errore interpretazione stringa')
	 
		# svuota il buffer
		try:
			while self.buffer[0]!= None:
				self.buffer.pop()
			#print buffer
		except IndexError:
			self.buffer
			# la lista e' vuota
			#print "- ho svuotato il buffer"

	def checkinfo(self):
		# verifica che tutte le informazioni sono state ricevute
		if (len(common.DATE) == 4) and (len(common.TIME) == 4) and (len(common.NMBR)>0):
			return 1
		else:
			#print str(len(common.DATE)) + " " + str(len(common.TIME)) + " " + str(len(common.NMBR)) #test
			return 0

	def WhoIsIt(self):
		print "Sono Serialmod!"

					   
def serialstart():
	sc = SerialClass() 
	sc.reader()
